package com.google.code.cana.pojo.compra;

import java.io.Serializable;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import com.google.code.cana.pojo.financeiro.ItemExtrato;

/**
 * Classe que representa uma compra.
 * 
 * @author Taciano Pinheiro
 * 
 */
public class Compra implements Serializable, ItemExtrato, Comparable<Compra> {

	private static final long serialVersionUID = 7143698057097317791L;

	private Integer compraId;

	private Set<ItemCompra> itensCompra = new TreeSet<ItemCompra>();

	private Date dataCadastro;

	private Date dataCompra;

	private String numeroNotaFiscal;

	private boolean finalizada = false;
	
	private String observacao = "";

	/**
	 * Recupera o valor total da compra.
	 * 
	 * @return O valor total da compra.
	 */
	public Double getValorTotal() {
		return getTotalCompra();
	}

	/**
	 * @return the numeroNotaFiscal
	 */
	public String getNumeroNotaFiscal() {
		return numeroNotaFiscal;
	}

	/**
	 * @param numeroNotaFiscal
	 *            the numeroNotaFiscal to set
	 */
	public void setNumeroNotaFiscal(String numeroNotaFiscal) {
		this.numeroNotaFiscal = numeroNotaFiscal;
	}

	/**
	 * @return the dataCompra
	 */
	public Date getDataCompra() {
		return dataCompra;
	}

	/**
	 * @param dataCompra
	 *            the dataCompra to set
	 */
	public void setDataCompra(Date dataCompra) {
		this.dataCompra = dataCompra;
	}

	/**
	 * @return the dataCadastro
	 */
	public Date getDataCadastro() {
		return dataCadastro;
	}

	/**
	 * @param dataCadastro
	 *            the dataCadastro to set
	 */
	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	/**
	 * @return the itensCompra
	 */
	public Set<ItemCompra> getItensCompra() {
		return itensCompra;
	}

	/**
	 * @param itensCompra
	 *            the itensCompra to set
	 */
	public void setItensCompra(Set<ItemCompra> itensCompra) {
		this.itensCompra = itensCompra;
	}

	/**
	 * @return the compraId
	 */
	public Integer getCompraId() {
		return compraId;
	}

	/**
	 * @param compraId
	 *            the compraId to set
	 */
	public void setCompraId(Integer compraId) {
		this.compraId = compraId;
	}

	/**
	 * @return the finalizada
	 */
	public boolean isFinalizada() {
		return finalizada;
	}

	/**
	 * @param finalizada
	 *            the finalizada to set
	 */
	public void setFinalizada(boolean finalizada) {
		this.finalizada = finalizada;
	}

	public Double getTotalCompra() {
		Double total = 0.0;
		for (Iterator iter = itensCompra.iterator(); iter.hasNext();) {
			ItemCompra item = (ItemCompra) iter.next();
			total += item.getSubtotal();
		}
		return total;
	}

	/* (non-Javadoc)
	 * @see com.google.code.cana.pojo.financeiro.Saida#getDataRegistro()
	 */
	public Date getDataRegistro() {
		return getDataCompra();
	}

	/* (non-Javadoc)
	 * @see com.google.code.cana.pojo.financeiro.Saida#getValorMovimentacao()
	 */
	public Double getValorMovimentacao() {
		return getTotalCompra();
	}

	/**
	 * @return the observacao
	 */
	public String getObservacao() {
		return observacao;
	}

	/**
	 * @param observacao the observacao to set
	 */
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	/* (non-Javadoc)
	 * @see com.google.code.cana.pojo.financeiro.ItemExtrato#getDescricaoItem()
	 */
	public String getDescricaoItem() {
		return "Compra com nota fiscal " + getNumeroNotaFiscal();
	}

	/* (non-Javadoc)
	 * @see java.lang.Comparable#compareTo(java.lang.Object)
	 */
	public int compareTo(Compra o) {
		return getDataCompra().compareTo(o.getDataCompra());
	}
}
